
import { ResultState, SDKLogicState, SDKState } from "../../SDKDefine";
import { registerClass } from "../../../cfw/tools/class_decorator";
import BaseAd from "../../core/base/BaseAd";
/**
 * 调用该方法创建的激励视频广告是一个单例
 * 默认是隐藏的，需要调用 RewardedVideoAd.show() 将其显示。
 * 每次创建自动加载
 * 创建激励视频广告组件。请通过 wx.getSystemInfoSync() 
 * 返回对象的 SDKVersion 判断基础库版本号后再使用该 API（小游戏端要求 >= 2.0.4，
 *  小程序端要求 >= 2.6.0）。
 * 调用该方法创建的激励视频广告是一个单例（小游戏端是全局单例
 * ，小程序端是页面内单例，在小程序端的单例对象不允许跨页面使用）。
 */
@registerClass('WXRewardAd')
export default class WXRewardAd extends BaseAd {

    init(): void {
        this.preload();
    }

    open(): void {
        this.setLogicState(SDKLogicState.open)
        if (this.isState(SDKState.loadSucess)) {
            this.show()
        } else {
            this.create();
        }
    }


    show() {
        this.setLogicState(SDKLogicState.close)
        this.setState(SDKState.show)
        if (this.ad) {
            this.ad.show().then(() => {
            }).catch(() => {
                this.ad.load()
                    .then(() => {
                        this.ad.show()
                    })
                    .catch((err: any) => {
                    })
            })
        }
    }

    onClose(res: any) {
        console.log('NativeTest onClose ', res)
        this.setState(SDKState.close)
        if (res && res.isEnded || res === undefined) {
            this.callResultCallback(ResultState.YES)
        } else {
            this.callResultCallback(ResultState.NO)
        }
    }


    protected onErrorLogic(): void {
        this.callResultCallback(ResultState.NO)
    }

    create(): void {
        this.setState(SDKState.loading)
        // let sdkVersion = this.sdk.getSystemInfoSync().SDKVersion;
        if (!this.ad) {
            // console.log(' 不支持多例')
            this.ad = this.sdk.createRewardedVideoAd({ adUnitId: this.adUnitID })
            this.ad.onLoad(this.getFunc(this.onLoad))
            this.ad.onError(this.getFunc(this.onError))
            this.ad.onClose(this.getFunc(this.onClose))
        } else {
            this.ad.load();
        }

    }

    onLoadLogic() {
        if (this.isLogicState(SDKLogicState.open)) {
            
            this.show()
        }
    }

    destroy(): void {
        // if (this.ad) {
        //     this.ad.offLoad(this.getFunc(this.onLoad))
        //     this.ad.offError(this.getFunc(this.onError))
        //     this.ad.offClose(this.getFunc(this.onClose))
        //     this.ad.destroy();
        //     this.ad = null;
        // }
    }
}
